使用 VisualApplets 信號處理運算子重建 TrgPortLine 運算子

簡短描述

檔案: \examples\Processing\Trigger\mE4VD4-CL\Line\TrgPortLineRebuild_mE4VD4CL.va

預設平台: mE4VD4-CL

簡短說明

VisualApplets 運算子 TrgPortLine 是利用來自 VisualApplets 運算子庫中的其他訊號處理運算子重新建構而成的。 此重新建構版本讓您能夠自訂觸發功能,並展示VisualApplets 中眾多訊號處理運算子的使用方式。

操作員 TrgPortLine 是一個複雜的VisualApplets 運算子,提供廣泛的線性 掃描觸發功能。在某些應用中,需要對此運算子的功能進行修改,以 進行客製化的訊號處理。

在此範例中,我們將介紹 TrgPortLine 運算子,並結合其他VisualApplets 訊號處理運算子。這使您能夠根據自訂需求來調整與修改其功能。 此實作雖屬進階,但易於理解。為簡化實作中複雜的參數設定, 以下對照表可協助您 根據 TrgPortLine 參數的名稱, 計算新設計的參數。

名稱 YOffset
Default 0
Device1_Process0_ImageTrigger_ImageHeight_Width = YHeight - YOffset
										Device1_Process0_ImageTrigger_ImageTriggerDelay_Delay_Delay = YHeight + YOffset
						
名稱 YHeight
Default 1024
Device1_Process0_ImageTrigger_ImageHeight_Width = YHeight - YOffset
										Device1_Process0_ImageTrigger_ImageTriggerDelay_Delay_Delay = YHeight + YOffset
						
名稱 LineTriggerMode
Default GrabberControlled
Device1_Process1_LineTrigger_LineTriggerMode_Select = 3 if GrabberController 0,1 or 2 if Extern_Trigger
										For Extern_Trigger, the correct value is defined by the shaft encoder settings.
										The other modes available by TrgPortLine are not supported.
						
名稱 ExsyncEnable
Default OFF
Device1_Process1_LineTrigger_Exsync_ExsyncEnable_Select = 1 if ON  0 if OFF
						
名稱 LineTrgInSourceA
Default 0
Device1_Process1_LineTrigger_TraceA_Input_Select = LineTrgInSourceA
						
名稱 LineTrgInSourceB
Default 1
Device1_Process1_LineTrigger_TraceB_Input_Select = LineTrgInSourceB
						
名稱 EncoderABMode
Default Signal_A_Only
Device1_Process1_LineTrigger_LineTriggerMode_Select = 3 if LineTriggermode == GrabberControlled
	  									0 if EncoderABMode == Signal_A_Only 1 else Device1_Process1_LineTrigger_ShaftEncoder_Mode =
	  									Mode1X if EncoderABMode == Signal_AB_Filter
	  									Mode2X if EncoderABMode == Signal_ABx2_Filter
	  									Mode4X if EncoderABMode == Signal_ABx4_Filter
						
名稱 EncoderABLead
Default Signal_AB
Device1_Process1_LineTrigger_ShaftEncoder_LeadingTrace =
	 									A if EncoderABLead == Signal_AB
	 									B else
						
名稱 LineTrgInPolarity
Default LowActive
Device1_Process1_LineTrigger_TraceA_Polarity_Invert =
	  									Invert if LineTrgInPolarity = LowActive
	  									NotInvert else
						
名稱 LineTrgInPolarity
Default LowActive
Device1_Process1_LineTrigger_TraceA_Polarity_Invert =
	  									Invert if LineTrgInPolarity = LowActive
	  									NotInvert else
										Device1_Process1_LineTrigger_TraceB_Polarity_Invert =
	  									Invert if LineTrgInPolarity = LowActive
	  									NotInvert else
						
名稱 LineTrgDownscaler
Default 1
Device1_Process1_LineTrigger_Downscale_Donwscale = LineTrgDownscaler
名稱 LineTrgPhase
Default 1
Device1_Process1_LineTrigger_Downscale_SelectecPulse = LineTrgPhase
名稱 ExsyncPeriod
Default 100微秒
Device1_Process1_LineTrigger_Generate_Period = ExsyncPeriod / TClk
名稱 Exsync2Delay
Default 0微秒
Device1_Process1_LineTrigger_Exsync_Exsync2_Delay = Exsync2Delay / TClk
[注意] VisualApplets 僅限 2.1 版或更高版本

對於VisualApplets 2.0 版本,延遲時間必須設定為 0。

名稱 ExsyncPolarity
Default LowActive
Device1_Process1_LineTrigger_Exsync_OutputPolarity_Polarity =
	 										Invert if ExsyncPolarity = LiwActive
											NotInvert else
							
名稱 ImgTriggerMode
Default FreeRun
Device1_Process0_ImageTrigger_SelectGatedImageTrigger_Select =
											1 if ImgTriggerMode == FreeRun
	 										0 else
											Device1_Process0_ImageTrigger_SelectFreeRun_Select =
	  										1 if ImgTriggerMode == FreeRun
	 										0 else
							
名稱 ImgTriggerInSource
Default InSignal0
Device1_Process0_ImageTrigger_EnableSoftwareTrigger =
	  										1 if ImgTriggerInSource == SoftwareTrigger
	 										0 else
											Device1_Process0_ImageTrigger_ImageTriggerInput_Input_Select =
											  0 if ImgTriggerInSource == InSignal0
											  1 if ImgTriggerInSource == InSignal1
											  2 if ImgTriggerInSource == InSignal2
											  3 if ImgTriggerInSource == InSignal3
											  4 if ImgTriggerInSource == InSignal4
											  5 if ImgTriggerInSource == InSignal5
											  6 if ImgTriggerInSource == InSignal6
											  7 if ImgTriggerInSource == InSignal7
						  	
名稱 ImgTrgInPolarity
Default LowActive
Device1_Process0_ImageTrigger_ImageTriggerInput_Polarity_Polarity =
										  	Invert if ImgTrgInPolarity == LowActive
										  	NotInvert else
						  	
名稱 ImgTrgDelay
Default 0 行
Device1_Process0_ImageTrigger_ImageTriggerDelay_Delay_Delay = ImgTrgDelay
[注意] VisualApplets 僅限 2.1 版或更高版本

對於VisualApplets 2.0 版本,延遲時間必須設定為 0。

名稱 FlashEnable
Default OFF
Device1_Process0_ImageTrigger_FlashOutput_Enable_Select =
											1 if FlashEnable == ON
											0 else
							
名稱 FlashPolarity
Default LowActive
Device1_Process0_ImageTrigger_FlashOutput_Polarity_Polarity = 
											Invert if FlashPolarity == LowActive
											NotInvert else
							
名稱 FlashDelay
Default 0 行
Device1_Process0_ImageTrigger_FlashDelay_Delay_Delay = FlashDelay
[注意] VisualApplets 僅限 2.1 版或更高版本

對於VisualApplets 2.0 版本,延遲時間必須設定為 0。

名稱 SoftwareTrgPulse
Device1_Process0_ImageTrigger_SoftwareTrigger_Mode = 
	 										Pulse if SoftwareTrgPulse == 1 && ImgTrgMode == ExternSw_Trigger
	  										not write access else
							
名稱 SoftwareTrgInput
Device1_Process0_ImageTrigger_SoftwareTrigger_Mode = 
											High if SoftwareTrgInput == 1 && ImgTrgMode == ExternSw_Gate
	  										Low else
							
名稱 ImgTrgIsBusy(唯讀參數)
ImgTrgIsBusy = Device1_Process0_ImageTrigger_ImgTrgIsBusy_Status
名稱 CC1output
Default Exsync
Device1_Process1_LineTrigger_Exsync_CC1_Select_Select = 
											0 if Exsync
											1 if ExsyncInvert
											2 if Exsync2
											3 if Exsync2Invert
											4 if Flash
											5 if FlashInvert
											6 if Gnd
											7 if Vcc
							
名稱 CC2output
Default Exsync
Device1_Process1_LineTrigger_Exsync_CC2_Select_Select = 
											0 if Exsync
											1 if ExsyncInvert
											2 if Exsync2
											3 if Exsync2Invert
											4 if Flash
											5 if FlashInvert
											6 if Gnd
											7 if Vcc
							
名稱 CC3output
Default Exsync
Device1_Process1_LineTrigger_Exsync_CC3_Select_Select = 
											0 if Exsync
											1 if ExsyncInvert
											2 if Exsync2
											3 if Exsync2Invert
											4 if Flash
											5 if FlashInvert
											6 if Gnd
											7 if Vcc
							
名稱 CC4output
Default Exsync
Device1_Process1_LineTrigger_Exsync_CC4_Select_Select = 
											0 if Exsync
											1 if ExsyncInvert
											2 if Exsync2
											3 if Exsync2Invert
											4 if Flash
											5 if FlashInvert
											6 if Gnd
											7 if Vcc
							
名稱 ImgTrgDebounceMaxTime
在此實作中非必要。
名稱 ImgTrgDebouncingTime
Default 65.520微秒
Device1_Process0_ImageTrigger_ImageTriggerInput_Debounce_Debounce = ImgTrgDebouncingTime / TClk
名稱 LineTrgDebouncingTime
Default 0.112微秒
Device1_Process1_LineTrigger_TraceA_Debounce_Debounce = LineTrgDebouncingTime / TClk
											Device1_Process1_LineTrigger_TraceB_Debounce_Debounce = LineTrgDebouncingTime / TClk
							

變數 TClk 取決於所使用的幀擷取卡。對於microEnable IV VD4-CL ,其週期為 16ns。 請參閱 附錄。裝置資源 以查看完整清單。

實作

此實作分為 ImageTrigger 和 LineTrigger 兩部分。 LineTrigger 的實作位於 Process1 中。 由於此程序沒有 DMA 通道,因此即使尚未啟動擷取,在將小程式載入至幀擷取卡後,它仍會立即啟動, 即使尚未啟動擷取。 此設計的優點在於,即使在擷取尚未開始之前,也能先觸發攝影機。 有關沒有 DMA 通道的程序,請參閱「沒有 DMA 的程序 / 觸發程序」以獲取更多資訊。

接下來的兩節將概述影像觸發與行觸發的實作方式。

影像觸發實作

影像觸發單元負責組裝影像,亦即從一維輸入線流中形成二維影像。 根據TrgPortLine運算子,影像高度可透過以下方式定義: 固定高度並使用所有輸入行(自由運行模式),或固定高度但由外部控制器觸發影像開始(外部或 軟體觸發) 或者,高度可由外部或軟體觸發訊號的脈衝長度來定義(門控模式)。

影像觸發功能實作的主要部分是 SignalGate 運算子。 影像高度由閘門開啟的時間長度所定義。 模組ImageHeight(運算子SignalWidth)在自由運行或邊沿控制觸發模式下定義影像高度。 在這些情況下,運算子的數值會隨著每條新的輸入行而增加。 這是將Tick輸入用於控制計數速度的絕佳範例。 在自由運行模式下,新影像會在前一個影像結束後立即開始,也就是說,當SignalWidth運算子完成其週期的輸出時。 在外部或軟體觸發模式下,新影像會隨著SignalWidth 輸入端的上升沿而開始。 必須使用 RS-FF 來確保脈衝足夠長。

透過SelectGatedImageTrigger,可將實作切換至閘控模式,在此模式下,脈衝長度會控制影像的高度。

層級方塊NOP_DelayChain包含若干NOP運算子。 這些運算子是用來將輸入訊號延遲幾個時脈週期。 這是因為計算閘極應開啟或關閉所需的時間,會耗費幾個時脈週期。 在此情況下,VisualApplets 無法執行自動管線調整。 因此需要進行此延遲。

「TrgPortLine 重建範例」中的階層式方塊影像觸發器

圖 420. TrgPortLine 重建範例中的階層式 Box ImageTrigger


實作的其他部分包含輸入與輸出訊號的產生。 這些部分的實作相當簡單且直截了當。 閃光輸出訊號是透過 h-boxFlashOutput 中的TxSignalLine運算子傳輸至 Process1。 這是必要的,因為閃光訊號也必須輸出至 CC 訊號。

線陣觸發實作

LineTrigger 階層式方塊主要由輸入與輸出訊號產生、 軸編碼器分析以及頻率產生器所組成。 針對軸編碼器訊號分析,會使用ShaftEncoder 與ShaftEncoderCompensate運算子。 「LineTriggerMode」選擇開關可讓使用者自行決定是否啟用或停用補償功能,或是停用雙變壓器分析。 此外,系統還實作了一個由Generate運算子代表的內部頻率產生器,用以觸發攝影機。

「TrgPortLine 重建範例」中的階層式方塊線觸發器

圖 421. TrgPortLine 重建範例中的階層式 Box LineTrigger